package org.example.redisson.kerberos;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.io.File;

/**
 * Spring Data Redis Kerberos 认证配置示例
 * 本示例展示如何为 Spring Data Redis 添加 Kerberos 认证：
 * 1. 创建 Redis 连接工厂。
 * 2. 配置 Kerberos 认证相关参数。
 * 3. 创建 RedisTemplate 实例。
 * 适合初学者学习 Spring Data Redis 的 Kerberos 认证配置。
 */
@Configuration
public class SpringDataRedisKerberosConfig {

    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
        config.setHostName("localhost");
        config.setPort(6379);
        config.setUsername("your-username");
        config.setPassword("your-password");
        // 启用 Kerberos 认证
        config.setKerberosEnabled(true);
        // 设置 Kerberos 主体
        config.setKerberosPrincipal("your-principal@REALM");
        // 设置 keytab 文件路径
        config.setKerberosKeytabPath("/path/to/your/keytab");

        return new LettuceConnectionFactory(config);
    }

    @Bean
    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory connectionFactory) {
        RedisTemplate<String, String> template = new RedisTemplate<>();
        template.setConnectionFactory(connectionFactory);
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new StringRedisSerializer());
        return template;
    }
} 